package br.com.empresa.controller;

import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;

import javax.swing.JOptionPane;

import br.com.empresa.app.Principal;
import br.com.empresa.dao.FornecedorDAO;
import br.com.empresa.modelo.Fornecedor;
import br.com.empresa.modelo.TabelaFornecedor;
import javafx.beans.property.IntegerProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;

public class FornecedorController implements Initializable{
	
	@FXML
    private TextField txCodigo;

	@FXML
    private TextField txNomeFantasia;

	@FXML
    private TextField txRazaoSocial;

	@FXML
    private TextField txInscricaoEstadual;

	@FXML
    private TextField txCNPJ;

	@FXML
    private TextField txTelefone;

    @FXML
    private Button btSalvar;

    @FXML
    private Button btLimpar;

    @FXML
    private Button btEditar;

    @FXML
    private Button btExcluir;
    
    @FXML
    private Button btVoltar;
    
    @FXML
    private TextField txSearch;

    @FXML
    private TableView<TabelaFornecedor> tabelaForn;

    @FXML
    private TableColumn clCodigo;

    @FXML
    private TableColumn clNome;

    @FXML
    private TableColumn clCnpj;

    @FXML
    private TableColumn clFone;

    @FXML
    void salvar(ActionEvent event) {
    	Fornecedor f = new Fornecedor();
    	
    	f.setNomeFantasia(txNomeFantasia.getText());
    	f.setRazaSocial(txRazaoSocial.getText());
    	f.setInscricaoEstadual(txInscricaoEstadual.getText());
    	f.setCnpj(txCNPJ.getText());
    	f.setTelefone(txTelefone.getText());
    	
    	FornecedorDAO dao = new FornecedorDAO();
    	
    	if(!txCodigo.getText().trim().equals("")){
    		f.setCodigo(Integer.parseInt(txCodigo.getText()));
    		dao.editar(f);
    	}else{
    		dao.inserir(f);
    	}
    	listarDados();
    	limparDados();
    }

    @FXML
    void limpar(ActionEvent event) {
    	limparDados();
    }

	private void limparDados() {
		txNomeFantasia.setText("");
    	txRazaoSocial.setText("");
    	txInscricaoEstadual.setText("");
    	txCNPJ.setText("");
    	txTelefone.setText("");
    	txCodigo.setText("");
	}

    @FXML
    void Editar(ActionEvent event) {
    	IntegerProperty cdFornecedor = tabelaForn.getSelectionModel().getSelectedItem().codigoProperty();
    	
    	FornecedorDAO dao = new FornecedorDAO();
    	Fornecedor fsalvo = dao.getById(cdFornecedor.intValue());
    	
    	txNomeFantasia.setText(fsalvo.getNomeFantasia());
    	txCNPJ.setText(fsalvo.getCnpj());
    	txTelefone.setText(fsalvo.getTelefone());
    	txInscricaoEstadual.setText(fsalvo.getInscricaoEstadual());
    	txCodigo.setText(String.valueOf(fsalvo.getCodigo()));
    	txRazaoSocial.setText(fsalvo.getRazaSocial());
    	
    }
    
    @FXML
    void Excluir(ActionEvent event) {
    	int linhaSelecionada = tabelaForn.getSelectionModel().getSelectedIndex();
    	IntegerProperty cdFornecedor = tabelaForn.getSelectionModel().getSelectedItem().codigoProperty();
    	FornecedorDAO dao = new FornecedorDAO();
    	dao.excluir(cdFornecedor.intValue());
    	tabelaForn.getItems().remove(linhaSelecionada);
    }
    
    @FXML
    void pesquisar(ActionEvent event) {
    	FornecedorDAO dao = new FornecedorDAO();
		List<Fornecedor> listaFornecedores = dao.pesquisar(txSearch.getText());
		ObservableList<TabelaFornecedor> dadosTabela = FXCollections.observableArrayList();
		
		for(Fornecedor f : listaFornecedores){
			dadosTabela.add(new TabelaFornecedor(f));
		}
		
		clCodigo.setCellValueFactory(new PropertyValueFactory<>("codigo"));
		clNome.setCellValueFactory(new PropertyValueFactory<>("nomeFantasia"));
		clFone.setCellValueFactory(new PropertyValueFactory<>("telefone"));
		clCnpj.setCellValueFactory(new PropertyValueFactory<>("cnpj"));
		
		tabelaForn.setItems(dadosTabela);
    }

    public void listarDados(){
    	FornecedorDAO dao = new FornecedorDAO();
		List<Fornecedor> listaFornecedores = dao.listar();
		ObservableList<TabelaFornecedor> dadosTabela = FXCollections.observableArrayList();
		
		for(Fornecedor f : listaFornecedores){
			dadosTabela.add(new TabelaFornecedor(f));
		}
		
		clCodigo.setCellValueFactory(new PropertyValueFactory<>("codigo"));
		clNome.setCellValueFactory(new PropertyValueFactory<>("nomeFantasia"));
		clFone.setCellValueFactory(new PropertyValueFactory<>("telefone"));
		clCnpj.setCellValueFactory(new PropertyValueFactory<>("cnpj"));
		
		tabelaForn.setItems(dadosTabela);
    }

    @FXML
    void voltar(ActionEvent event) {
    	try{
    		Parent root = FXMLLoader.load(getClass().getResource("/br/com/empresa/view/principal.fxml"));
    		Principal.cena.setRoot(root);
    	}catch(IOException ex){
    		ex.printStackTrace();
    	}
    }
    
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		listarDados();
	}
}
